// pages/exam/exam.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    loading: false,
    // 倒计时（单位：秒）
    countdown: "44:31",
    // 当前题目索引（从0开始）
    currentIndex: 0,
    // 题目数据列表
    questions: [{
        type: "判断题",
        content: "机动车在夜间道路上发生故障难以移动时要开启危险报警闪光灯、示廓灯、后位灯。",
        options: {
          A: "正确",
          B: "错误"
        },
        selected: "", // 用户选中的选项
        collect: false, // 是否收藏
        answer: "A", // 正确答案
        status: "current" // 当前题状态
      },
      {
        type: "单选题",
        content: "驾驶机动车在道路上向左变更车道时应提前开启左转向灯，原因是？",
        options: {
          A: "提示前方车辆减速让行",
          B: "提示行人让行"
        },
        selected: "",
        collect: true,
        answer: "A",
        status: ""
      },
      {
        type: "判断题",
        content: "驾驶机动车在没有中心线的城市道路上，最高速度不能超过每小时50公里。",
        options: {
          A: "正确",
          B: "错误"
        },
        selected: "",
        collect: false,
        answer: "B",
        status: ""
      }
    ],
    // 统计数据
    correctCount: 0,
    wrongCount: 0,
    totalQuestions: 3,
    // 题目状态列表（用于弹窗显示）
    questionStatus: [],
    // 是否显示题目列表
    showQuestionList: false,
    timerId: null, // 保存定时器ID（核心）
  },

  // 更新题目状态列表（用于弹窗显示）
  updateQuestionStatus() {
    const statusList = this.data.questions.map(item => ({
      status: item.status
    }));
    this.setData({
      questionStatus: statusList
    });
  },

  // 启动倒计时
  startCountdown() {
    let minutes = 44;
    let seconds = 31;

    // 保存定时器ID到data
    const timerId = setInterval(() => {
      seconds--;
      if (seconds < 0) {
        seconds = 59;
        minutes--;
      }
      if (minutes < 0) {
        this.submitExam();
        return;
      }

      this.setData({
        countdown: `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`
      });
    }, 1000);
    this.setData({
      timerId
    }); // 保存ID
  },
  // 停止倒计时（核心函数）
  stopCountdown() {
    const {
      timerId
    } = this.data;
    if (timerId) {
      clearInterval(timerId); // 清除定时器
      this.setData({
        timerId: null
      }); // 重置ID
    }
  },
  // 选择选项
  selectOption(e) {
    const {
      option,
      index
    } = e.currentTarget.dataset;
    const newQuestions = [...this.data.questions];

    // 更新当前题的选中状态
    newQuestions[index].selected = option;

    // 判断对错并更新状态
    const isCorrect = option === newQuestions[index].answer;
    newQuestions[index].status = isCorrect ? "correct" : "wrong";

    // 更新统计数据
    this.calcStats(newQuestions);

    this.setData({
      questions: newQuestions
    }, () => {
      this.updateQuestionStatus();
    });
  },

  // 计算正确/错误数量
  calcStats(questions) {
    let correct = 0;
    let wrong = 0;

    questions.forEach(item => {
      if (item.status === "correct") correct++;
      if (item.status === "wrong") wrong++;
    });

    this.setData({
      correctCount: correct,
      wrongCount: wrong
    });
  },

  // 切换收藏状态
  toggleCollect() {
    const newQuestions = [...this.data.questions];
    newQuestions[this.data.currentIndex].collect = !newQuestions[this.data.currentIndex].collect;
    this.setData({
      questions: newQuestions
    });
    wx.showToast({
      title: newQuestions[this.data.currentIndex].collect ? "已收藏" : "取消收藏",
      icon: "none"
    });
  },

  // 交卷
  submitExam() {
    wx.showModal({
      title: "提示",
      content: `确定要交卷吗？已完成${this.data.correctCount + this.data.wrongCount}/${this.data.totalQuestions}题`,
      success: (res) => {
        this.stopCountdown(); // 交卷后停止倒计时
        if (res.confirm) {
          wx.navigateTo({
            url: '/pages/result/index'
          });
        }
      }
    });
  },

  // 显示/隐藏题目列表
  showQuestionList() {
    this.setData({
      showQuestionList: !this.data.showQuestionList
    });
  },

  // 跳转到指定题目
  jumpToQuestion(e) {
    const targetIndex = e.currentTarget.dataset.index;
    this.switchQuestion(targetIndex);
  },

  // 滑动切换题目（swiper事件）
  handleSwiperChange(e) {
    const targetIndex = e.detail.current;
    this.switchQuestion(targetIndex);
  },

  // 切换题目核心逻辑
  switchQuestion(targetIndex) {
    // 更新所有题目的状态
    const newQuestions = [...this.data.questions].map((item, index) => {
      if (index === targetIndex) {
        // 当前题状态（如果未做则为current，否则保持原有状态）
        return {
          ...item,
          status: item.status || "current"
        };
      } else if (item.status === "current") {
        // 原当前题如果未选择选项，则状态清空
        return {
          ...item,
          status: item.selected ? item.status : ""
        };
      }
      return item;
    });

    this.setData({
      questions: newQuestions,
      currentIndex: targetIndex,
      showQuestionList: false
    }, () => {
      this.updateQuestionStatus();
    });
  },

  // 返回上一页
  goBack() {
    wx.navigateBack();
  },
  // 加载题目数据（封装为函数，可复用）
  loadQuestionData(isRefresh = false) {
    // 模拟接口请求（实际项目中替换为 wx.request）
    setTimeout(() => {
      const newQuestions = [{
          type: "判断题",
          content: "【新数据】机动车通过急转弯路段时，在机动车较少的情况下可以超车。",
          options: {
            A: "正确",
            B: "错误"
          },
          answer: "B"
        },
        {
          type: "单选题",
          content: "【新数据】驾驶机动车在道路上超车完毕驶回原车道时，应该怎么做？",
          options: {
            A: "加速驶回",
            B: "减速驶回"
          },
          answer: "B"
        }
      ];

      // 更新数据
      this.setData({
        questions: newQuestions,
        currentIndex: 0, // 重置到第一题
        loading: false
      });

      // 如果是下拉刷新触发的，结束刷新动画（核心）
      if (isRefresh) {
        wx.stopPullDownRefresh();
        // 提示用户刷新成功
        wx.showToast({
          title: "数据已更新",
          icon: "success",
          duration: 1500
        });
      }
    }, 1000); // 模拟1秒请求耗时
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 初始化题目状态列表
    this.updateQuestionStatus();
    // 启动倒计时
    this.startCountdown();
  },
  // 点击遮罩层事件
  closeByMask() {
    this.setData({
      showQuestionList: false
    });
  },
  // 弹框内部点击事件（空函数，仅用于阻止冒泡）
  doNothing() {},
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    this.stopCountdown(); // 交卷后停止倒计时
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    if (this.data.loading) return; // 防止重复刷新
    // 显示加载状态
    this.setData({
      loading: true
    });
    // 重新加载数据（模拟接口请求）
    this.loadQuestionData(true);
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})